package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.DeviceCloudControllerBridgeInfoPO;
import com.itlong.cloud.POJO.PO.DeviceCloudControllerElevatorInfoPO;
import com.itlong.cloud.POJO.PO.DeviceElevatorFloorConfigPO;
import com.itlong.cloud.POJO.VO.property.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      云群控器数据访问接口
 * </desc>
 *
 * @createDate 2019/03/25
 */
@Repository
@Mapper
public interface IDeviceCloudControllerDao {

    /**
     * <desc>
     *      检测sn是否已存在
     * </desc>
     *
     * @param sn
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/25
     */
    Integer checkSnIsExists(@Param("sn") String sn);

    /**
     * <desc>
     *      获取设备的状态
     * </desc>
     *
     * @param sn
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/25
     */
    Integer getDeviceStatus(@Param("sn") String sn);

    /**
     * <desc>
     *      分页查询云群控器列表
     * </desc>
     *
     * @param params 查询参数
     * @return 分页结果
     * @author wangzhi
     * @createDate 2019/03/26
     */
    List<PropertyDeviceCloudControllerGetVO> getPage(Map<String, Object> params);

    /**
     * <desc>
     *      查询云群控器总记录数
     * </desc>
     *
     * @param params 查询参数
     * @return 总记录数
     * @author wangzhi
     * @createDate 2019/03/26
     */
    Integer getRecordCount(Map<String, Object> params);

    /**
     * <desc>
     *      根据sn查询控制器设备
     * </desc>
     *
     * @param sn
     * @return
     * @author Jiaqi.X
     * @createDate 2019/03/27
     */
    CloudControllerVO getDeviceInfoBySn(@Param("sn") String sn);

    /**
     * <desc>
     *      修改设备的属性
     * </desc>
     *
     * @param deviceUnique      设备唯一编码
     * @param version           版本
     * @param deviceAttributes  产品型号id
     * @param mac               mac地址
     * @param productCode       产品型号代码
     * @return
     * @author Qiang.S
     * @createDate 2019/03/28
     */
    Integer updatePro(Map<String,Object> map);

    /**
     * <desc>
     *      查询单个云群控器
     * </desc>
     *
     * @param params 查询参数
     * @return 单个云群控器VO
     * @author wangzhi
     * @createDate 2019/03/27
     */
    PropertyDeviceCloudControllerGetVO getOne(Map<String, Object> params);

    /**
     * <desc>
     *      一键启用禁用设备
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/03/27
     */
    Integer setStatus(@Param("projectId") String projectId, @Param("deviceUniqueList") List<String> deviceUniqueList, @Param("status") Integer status);

    /**
     * <desc>
     *      获取云群控器可绑定的云电梯设备列表信息
     * </desc>
     *
     * @return 电梯设备列表信息
     * @author wangzhi
     * @createDate 2019/03/27
     */
    List<PropertyDeviceCloudControllerEleVO> getCloudElevatorList(Map<String, Object> params);

    /**
     * <desc>
     *      获取电梯楼层映射信息
     * </desc>
     *
     * @return 电梯楼层映射信息
     * @author wangzhi
     * @createDate 2019/03/28
     */
    List<PropertyElevatorFloorConfigVO> getElevatorFloorConfigGroup(List<String> deviceUniqueElevatorList);

    /**
     * <desc>
     *      校验所选云电梯的公共楼层是否一致
     * </desc>
     *
     * @return 0-不一致，1-一致
     * @author Juguang.S
     * @createDate 2020/06/10
     */
    List<String> getElevatorCommonFloorConfig(List<String> deviceUniqueElevatorList);

    /**
     * <desc>
     *      查询出楼层映射表的同步标准
     * </desc>
     *
     * @return 电梯楼层映射信息
     * @author wangzhi
     * @createDate 2019/03/28
     */
    List<DeviceElevatorFloorConfigPO> getElevatorFloorConfigList(@Param("resetDeviceUnique") String resetDeviceUnique);

    /**
     * <desc>
     *      根据设备序列号查询公共楼层
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2020/05/28
     */
    String getCommonFloorByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      删除楼层映射表
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/03/28
     */
    Integer deleteElevatorFloorConfig(List<String> deviceUniqueList);

    /**
     * <desc>
     *      批量保存楼层映射表
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/03/28
     */
    Integer batchSaveElevatorFloorConfig(List<DeviceElevatorFloorConfigPO> deviceElevatorFloorConfigPOList);

    /**
     * <desc>
     *      保存
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author wangzhi
     * @createDate 2019/03/28
     */
    Integer save(Map<String, Object> map);

    /**
     * <desc>
     *      批量保存云群控器地址信息
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/03/28
     */
    Integer batchSaveControllerBridge(List<DeviceCloudControllerBridgeInfoPO> bridgeInfoPOList);

    /**
     * <desc>
     *      批量保存云群控器云电梯信息
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/03/28
     */
    Integer batchSaveControllerElevator(List<DeviceCloudControllerElevatorInfoPO> controllerElevatorInfoPOList);

    /**
     * <desc>
     *      修改
     * </desc>
     *
     * @param map 参数集
     * @return 保存的行数
     * @author wangzhi
     * @createDate 2019/03/28
     */
    Integer update(Map<String, Object> map);

    /**
     * <desc>
     *      删除云群控器地址信息
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/03/28
     */
    Integer deleteControllerBridge(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      删除云群控器云电梯信息
     * </desc>
     *
     * @return 受影响行数
     * @author wangzhi
     * @createDate 2019/03/28
     */
    Integer deleteControllerElevator(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取云群控器产品ID
     * </desc>
     *
     * @return 云群控器产品ID
     * @author wangzhi
     * @createDate 2019/04/24
     */
    String getProductTypeId();

    /**
     * <desc>
     *      获取群控器绑定的电梯的sn
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/04/26
     */
    String getControllerBindElevatorDeviceSn(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      查询已知列表中正在执行指令过程的电梯数量
     * </desc>
     *
     * @return 已知列表中正在执行指令过程的电梯数量
     * @author wangzhi
     * @createDate 2019/05/06
     */
    Integer getCloudElevatorCallCount(List<String> deviceUniqueElevatorList);

    /**
     * <desc>
     *      查询已知列表中正在执行指令过程的群控器数量
     * </desc>
     *
     * @return 已知列表中正在执行指令过程的群控器数量
     * @author wangzhi
     * @createDate 2019/05/06
     */
    Integer getCloudControllerCallCount(List<String> deviceUniqueControllerList);

    /**
     * <desc>
     *      更新群控器可控楼层
     * </desc>
     *
     * @param deviceUnique
     * @param upFloor
     * @param downFloor
     * @return
     * @author Jiaqi.X
     * @createDate 2019/08/07
     */
    Integer updateControllerCmdFloor(@Param("deviceUnique") String deviceUnique,@Param("upFloor") String upFloor,@Param("downFloor") String downFloor);

    /**
     * <desc>
     *      通过电梯设备序列号查询电梯楼层映射表
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/08/07
     */
    List<DeviceElevatorFloorConfigPO> getFloorConfigByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      根据群控器机号查询所绑定的电梯
     * </desc>
     *
     * @param controllerDeviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/07/24
     */
    String getDeviceUniqueByControllerDeviceUnique(@Param("controllerDeviceUnique") String controllerDeviceUnique);

    /**
     * <desc>
     *      获取群控器详情
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Jiaqi.X
     * @createDate 2019/08/13
     */
    CloudControllerFloorInfoVO getControllerFloorInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      修改群控器绑定电梯的公共楼层，与所选楼层映射表的电梯保持一致
     * </desc>
     *
     * @return
     * @author Juguang.S
     * @createDate 2020/05/13
     */
    void updateCommonFloorByController(@Param("resetDeviceUnique") String resetDeviceUnique,@Param("deviceUniqueList") List<String> deviceUniqueList);

    /**
     * <desc>
     *      根据电梯获取所绑定的群控器
     * </desc>
     *
     * @return
     * @author Juguang.S
     * @createDate 2020/05/13
     */
    String getControllerByElevator(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      电梯的公共楼层变更后，电梯所绑定的群控器下的所有电梯的公共楼层一并变更
     * </desc>
     *
     * @return
     * @author Juguang.S
     * @createDate 2020/05/13
     */
    void updateCommonFloorByElevator(@Param("commonFloor") String commonFloor,@Param("controllerDeviceUnique") String controllerDeviceUnique);

    /**
     * <desc>
     *    获取产品类型代码
     * </desc>
     *
     * @param  deviceAttributes  产品型号值
     * @return  String           产品类型代码
     * @Author pengwei
     * @createDate  2020/11/18
     */
    String   getProductCode(@Param("deviceAttributes") String   deviceAttributes);


    /**
     * <desc>
     *      云控器是否存在
     * </desc>
     *
     * @param deviceUnique   设备唯一码
     * @return
     * @author pengwei
     * @createDate 2020/11/18
     */
    String getCloudDeviceExist(@Param("deviceUnique") String deviceUnique);


    /**
     * <desc>
     *      修改设备的属性
     * </desc>
     *
     * @param deviceUnique      设备唯一编码
     * @param version           版本
     * @param deviceAttributes  产品型号id
     * @param mac               mac地址
     * @param productCode       产品型号代码
     * @return
     * @author pengwei
     * @createDate 2020/11/18
     */
    Integer updateSpecialPro(Map<String,Object> map);

    /**
     * <desc>
     *      根据设备唯一编码判断特殊群控器设备信息表中是否有该设备
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/22
     */
    Integer isExistInSpecialCloudController(@Param("deviceUnique")String deviceUnique);

    /**
     * <desc>
     *      根据设备唯一编码删除特殊群控器设备信息表中的设备信息
     * </desc>
     *
     * @param deviceUnique
     * @return
     * @author Juguang.S
     * @createDate 2020/12/22
     */
    Integer deleteSpecialCloudControllerByDeviceUnique(@Param("deviceUnique")String deviceUnique);
}
